{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "293709.0435256856"
      ]
     },
     "execution_count": 67,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import argparse\n",
    "\n",
    "def calculate_nth_neighbor_average(csv_file, x_col, y_col, n):\n",
    "    # 读取数据\n",
    "    df = pd.read_csv(csv_file)\n",
    "    points = df[[x_col, y_col]].values\n",
    "    \n",
    "    # 数据校验\n",
    "    if len(points) < n + 1:\n",
    "        raise ValueError(f\"需要至少{n+1}个要素才能计算第{n}近邻居\")\n",
    "    \n",
    "    # 计算距离矩阵\n",
    "    diff = points[:, np.newaxis] - points\n",
    "    distances = np.sqrt(np.sum(np.square(diff), axis=2))\n",
    "    \n",
    "    # 排除自身距离\n",
    "    np.fill_diagonal(distances, np.inf)\n",
    "    \n",
    "    # 查找第n近的距离\n",
    "    sorted_distances = np.sort(distances, axis=1)\n",
    "    nth_distances = sorted_distances[:, n-1]\n",
    "    \n",
    "    # 计算平均值\n",
    "    return np.mean(nth_distances)\n",
    "\n",
    "calculate_nth_neighbor_average(\"D:\\Lenovo\\Desktop\\云南大学\\毕业设计\\毕设数据\\输出数据\\csv\\countyzhujiang_2\\countyzhujiang_2001_2.csv\",\"X_position\",\"Y_position\",77)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "绘制要素间平均最小距离图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "正在计算距离矩阵...\n",
      "正在预处理距离排序...\n",
      "计算完成，耗时0.01秒\n",
      "错误发生：unsupported operand type(s) for /: 'list' and 'int'\n",
      "常见问题检查：\n",
      "1. CSV文件路径是否正确\n",
      "2. 坐标列名是否匹配\n",
      "3. max_n值是否小于要素数量\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1YAAAI5CAYAAACiiatQAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAACOwUlEQVR4nOzdd3RU1d7G8WeSSSW9AGn03qQFAgiIoiAooHgRBLtyrfAqIui92AVsgA27oFKEIAiKKKiAiPQOofcUIIT0Milz3j+4jAwJSEjCpHw/a2UtZ+8zZ36TmeA8s8/e22QYhiEAAAAAwBVzcnQBAAAAAFDREawAAAAAoIQIVgAAAABQQgQrAAAAACghghUAAAAAlBDBCgAAAABKiGAFAAAAACVEsAIAAACAEiJYAQAASMrLy3N0CQAqMIIVgErl119/1axZs4rse+mll7R06dJine+bb77RV199VRqlSZJSUlIUGRmp77//vtTOebmsVqtycnJUUFDwj8fm5+fr3//+t0aOHFlm9fz3v//V0qVLZRhGqZ0zOTm5yHaLxSKr1Vqic+/evVuzZ8++4vsXFBSU2nP9448/dMcdd+jEiROF+latWqX77rtP27dvv6xz5efn688//9ShQ4cK9f3555/avHlziev9J5fznixrq1evVlBQkOrXr68///zT1v7ee+9p586dDqysfPx+APwzk1Ga/0cDgGLYt2+f1q5dKzc3Nzk7O//j8VarVRaLRQ0bNlRUVFSRxwwYMECrV69WYmKiXXtcXJzCw8P16KOPaurUqZddY7t27ZSbm6sdO3bY2o4dO6asrKyL3sfJyUmNGjUqsu+1117TuHHjdO+992r69Ol2fT179tRvv/1W6D5DhgyxC4u1a9fWsWPHCh2XnJysZ599Vp999tkln9OyZcvUs2dPSVJWVpbc3d3l5FT4e7Z77rlHc+bMUXx8vAIDA+36rFar8vLyZBiG3N3dJUmffPKJ9u/fb3dc69atNWzYsELnjouLU61atXTbbbdp3rx5l6z3cuXl5SksLEzXXnut5s2bZ/ecJk6cqOeff15ffPGF7r///is6/wMPPKDp06dr9+7daty4cbHvP3v2bE2YMEFvvfWWevXqJUn68ccfdd9992nOnDm64YYbLvtcc+bM0eDBgxUXF6fQ0FC7vrvuuks//PCD9u/fr5o1a/7jubKzs+Xp6amJEydqzJgxdn233Xabdu7cWeh1LU15eXm65ZZb9MADD+jOO+8ss8e5lIKCArVs2VKPPfaYkpOT9cYbb+jll19WZGSkBg4cqD/++ENNmzZ1SG1z5szRtGnT9OOPP8psNjukBgCXh79QAA7z119/6eGHH5a7u3uhYJWamio3Nzfbh3bp7Ief3NxcPfbYYxcNVh4eHvLw8CjUvmzZMplMJj377LPFqtHFxaXQKMPdd9+tP/7446L38fX1VUpKSqH2gwcPasKECbrmmmv0zTffKCcnR1988YWqVatmq/26667TRx99JEk6evSoevfurVtuucXuPK6urnr99ddtz+Wnn35S//795erqKk9PTzVp0kSrVq0q9PgFBQXKyclRcHCwJCkjI0Pe3t7/+DsICgq6aN/5AXHRokU6ePCghg0bpmPHjumzzz7Tl19+qe+//15eXl7q2bOnduzYIScnJ3355Zdyd3fXq6++qpSUFNtomqenp/z8/P6xpqIsXrxYiYmJat68ubZv3y5nZ2eZzWaZTCYlJibKMAz5+/trz549kv4O6vXq1ZOvr68kafv27bJarXJxcZGTk5NMJpPt/H369NG0adP01ltv6ZlnnrF77IKCAuXn5ysnJ0dt2rSRq6trofqmTp2q2NhYtW7d2tbm6uqqpKSky/piIS8vT9nZ2XJzc7Od38nJSZmZmTKbzXJzc9Phw4cVHR2t2rVr66WXXrK7/9NPP20L/BkZGUpOTparq6stgLq4uOj48eMKDg5Wdna2CgoKZDab5e3trV27dik/P1/5+fkKDQ1VSEjIP9Z7uR555BHFxcXppptuKrVzFtexY8cUFRWlJ554QpJ0/fXXa8CAATp9+rTefvvtIkPVqVOnlJKSooiIiCL/zSktN954o1555RU98sgj+vzzz8vscQCUAgMAypn09HRDkjFq1Ci79szMTCMnJ+eS9x06dKhRu3btQu29e/c2qlevbrz66qtF/vzxxx9Fnq9z585Gu3bt7Nquv/56o3v37kUe//jjjxvBwcGF2vPy8oxu3boZwcHBxunTp43vvvvOcHd3N1q2bGkcPnzYMAzDGDBggNG3b1/bfT755BPD2dnZSEpKsjtXs2bNjAkTJthu//DDD4YkIy8vz3j66aeN5s2bF1nbhaxWqxEbG2skJSUZqampRnp6upGYmGjMnz/fOHPm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0zVgwACZTCYNGjRIK1euvOjv7MiRIxo+fLgSEhK0ePFiXX/99YWOqV+/vk6ePGnXVqNGDdt/5+Xl6euvv1Zqamqh1/nVV1/Vvn37bLddXFx05swZPfroo7r55pvVrFkzPfTQQ7rvvvsknf27Wbp0qRYtWqSPP/5Y+fn5evDBByVJSUlJ2rlzp5o1a/aP74VL2b59u4YOHVqo/aWXXtLLL78si8Wi//znP5oxY4YyMzPVrVs3ffrppwoNDVWvXr20bNmyS57/mmuukSRdd911Gjx4sNzc3K641nOaNm1aaCGLBQsWaO/evXaX7q1Zs0YuLi5q3769YmJi5O3trVtuuUWvvPKK7d+33bt3q6CgQD169LA7X0hIiEJDQ7V582bdfvvtdn3XXnutxo4dW+LnAaBsEKwAOJynp6cmT56sJUuWqHbt2rZ5OtLZD7M7d+5Ur169NHr06GKf++6771bLli1Vp04dffTRR+rQoYOGDBmi3377Tc7OzpcMVj///LOks6GqdevWmjFjhq699lpbzUUFogtXtPP29tZjjz2m3Nxc20pz0dHRatiw4SXrfuKJJ/TZZ5/pySef1LRp04r1nF1dXQvVdm4fnqJWn8vMzJQk22qB0tkV5P5JTk5Oke0vvPCCvvvuO40cOVI33nij7r77bknS+++/ryVLlmjw4ME6c+ZMoflURdX27LPPasOGDfq///s/nTlzRm+++abuvPNO21yoH374QWazWV999ZW6d+9e6HwrV6686LyzC4+XpA0bNqhRo0b67rvvbHPlzr1HLBaLpLPzbM5//n5+flqyZIl69Ohht1reiy++qK1bt2rJkiX65ZdfiqzhnOHDh6tGjRpatWpVkV8eSNLWrVvl4uJimzdWt25djR07Vvfee68sFovMZrPatm1b5H2Dg4Pt9qn697//rX//+9+SCu+RlJ+fr1GjRmnhwoW2Zf47duyo4OBgubm5afHixcrJydGSJUu0f//+y1rRsCjx8fGFvkQ539ChQ7V3717997//1d69e/XBBx/o0Ucf1cKFCxUSEnLZKxOem8dX2r755htFR0frxx9/1P3332+bX5WXl6f169fLyclJ/fr108MPP6yYmBh98sknWrFihXbs2CFPT0/bnmv16tUrdO4aNWoU+qJAkkJDQxUfH18mzwdAyRGsADhEcnKyXFxc5ObmJpPJpP79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bbcpPT1d48ePL1TPuUvWzs1LLKlatWppxIgRGj58uNasWVOipduvljFjxig6OlqdO3fWE088IX9/f3366aeyWCy20efevXurU6dOevjhh/Xrr78qODhYy5cv19atW3XDDTdo2LBhtvONHTtW8+bNU58+fTR+/Hjt3btX48aNU+PGjdW7d2/bcVarVcOHD9dTTz31j/MoATgOwQpAuXPukpoLv2G/mLvuukv5+fkaPnx4oeXOJemmm25STExMkatvrVmzRpLsJsmfH6qsVmuhD70FBQWXHAm52DfpERERWrx4sbp06aLdu3dr69atatOmja3/3OiZdHbRhlGjRhWax3UuvMybN8+2hPq5yyoHDRpU6MPzPzn/ubVt21Zms1k+Pj46cOCAGjdurM6dO6t27dqqVauWUlNT9cILLyglJaXICffnXrcL6z13Sdkrr7wif39/jRkzxi7Ifvnll8WquSjn7y11bkQoIyNDBQUFRS5skZeXp6ysLO3atUs5OTl2q7edExsbq40bN2r58uVauHChEhMTNXz4cK1cuVJvvfWWVq9ereuuu07XXHONGjdurPDwcPn6+hYZEKxWa5G/s3O/hwULFqhmzZq299SePXu0c+dOdenSxfYFweLFi1WrVi19+eWX+vzzzzVixAgtWLBAvXr1UsOGDVW/fn2799DlSk5O1ty5c/X666/r1KlTmjFjRpHze5YsWSKpdC+xe+mll9S6dWs9+eST+vDDD0vtvGUlLCxMf/75p5577jl98MEHslqt6tKli2bOnKlWrVpJOhucf/rpJ/33v/9VdHS00tLS1KhRI7311lsaOXKk3WIqzZs31/fff6/7779fffv2lXR2r6zo6Gi7v5HHH39cycnJGjdu3NV9wgCKxWQU9TUZADjQyZMnVbNmTT366KO2TVpL08yZMzV27Fjl5OTo9OnTCgsL07Fjx4r8QNyhQweZzWb99ddftrabbrpJKSkpF90g+JdfflFiYuJFH/+7777THXfcUWiZ9d69e8tsNhc5R0s6u+BF06ZNlZmZKWdnZ7Vt21Zdu3ZV586dbSsCjhw5UvPnz9dbb71V6P6GYSgvL0+hoaHq2bOnJGnChAl65513bKNJycnJhRZpON/hw4c1ZcoUHT16VAsXLtTatWtt85GKqv/ZZ5/VW2+9pW7dutn2lXJ3d9e1116rDh06qHbt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",
      "text/plain": [
       "<Figure size 1000x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import argparse\n",
    "from time import time\n",
    "\n",
    "def calculate_distance_stats(csv_file, x_col, y_col, max_n):\n",
    "    \"\"\"计算从1到max_n的各个近邻距离统计\"\"\"\n",
    "    # 读取数据\n",
    "    df = pd.read_csv(csv_file)\n",
    "    points = df[[x_col, y_col]].values\n",
    "    \n",
    "    # 数据校验\n",
    "    num_points = len(points)\n",
    "    if num_points < 2:\n",
    "        raise ValueError(\"至少需要两个地理要素\")\n",
    "    if max_n >= num_points:\n",
    "        raise ValueError(f\"max_n必须小于要素数量({num_points})\")\n",
    "    \n",
    "    # 计算距离矩阵\n",
    "    print(\"正在计算距离矩阵...\")\n",
    "    t0 = time()\n",
    "    diff = points[:, np.newaxis] - points\n",
    "    distances = np.sqrt(np.sum(np.square(diff), axis=2))\n",
    "    np.fill_diagonal(distances, np.inf)  # 排除自身\n",
    "    \n",
    "    # 预处理排序\n",
    "    print(\"正在预处理距离排序...\")\n",
    "    sorted_distances = np.sort(distances, axis=1)\n",
    "    del distances  # 释放内存\n",
    "    \n",
    "    # 计算各n值结果\n",
    "    results = []\n",
    "    for n in range(1, max_n+1):\n",
    "        if n >= sorted_distances.shape[1]:\n",
    "            raise ValueError(f\"无法计算n={n}，可用最大n值为{sorted_distances.shape[1]-1}\")\n",
    "        avg = np.mean(sorted_distances[:, n-1])\n",
    "        results.append(avg/1000) #将单位由米转为千米\n",
    "    \n",
    "    print(f\"计算完成，耗时{time()-t0:.2f}秒\")\n",
    "    return results\n",
    "\n",
    "def plot_results(n_values, averages, output_img):\n",
    "    \"\"\"绘制结果曲线\"\"\"\n",
    "    plt.figure(figsize=(10, 6))\n",
    "    plt.plot(n_values, averages, \n",
    "              linestyle='-', \n",
    "             color='#2E86C1', linewidth=2)\n",
    "    \n",
    "    plt.title(f\"平均相邻距离随n值变化趋势 (n=1~{len(n_values)})\", \n",
    "             fontsize=14, pad=20)\n",
    "    plt.xlabel(\"近邻序号(n)\", fontsize=12)\n",
    "    plt.ylabel(\"平均距离(km)\", fontsize=12)\n",
    "    # plt.grid(True, alpha=0.3)\n",
    "    plt.xticks(ticks=n_values/5)\n",
    "    \n",
    "    # 自动调整显示范围\n",
    "    plt.xlim(0.5, len(n_values)+0.5)\n",
    "    y_min = np.min(averages) * 0.95\n",
    "    y_max = np.max(averages) * 1.05\n",
    "    plt.ylim(y_min, y_max)\n",
    "    \n",
    "    # 保存结果\n",
    "    # plt.savefig(output_img, dpi=300, bbox_inches='tight')\n",
    "    # print(f\"图表已保存至：{output_img}\")\n",
    "    plt.show()\n",
    "\n",
    "if __name__ == \"__main__\":\n",
    "    # parser = argparse.ArgumentParser(description='近邻距离趋势分析')\n",
    "    # parser.add_argument('--input', required=True, help='输入CSV文件路径')\n",
    "    # parser.add_argument('--x', default='X', help='X坐标列名')\n",
    "    # parser.add_argument('--y', default='Y', help='Y坐标列名')\n",
    "    # parser.add_argument('--max_n', type=int, required=True, \n",
    "    #                    help='最大计算n值（包含该值）')\n",
    "    # parser.add_argument('--output', default='distance_trend.png',\n",
    "    #                    help='输出图片路径')\n",
    "    \n",
    "    # args = parser.parse_args()\n",
    "\n",
    "    try:\n",
    "        # 参数校验\n",
    "        # if args.max_n < 1:\n",
    "        #     raise ValueError(\"max_n必须≥1\")\n",
    "        csv_file=\"D:\\Lenovo\\Desktop\\云南大学\\毕业设计\\毕设数据\\输出数据\\csv\\countyzhujiang_2\\countyzhujiang_2001_2.csv\"\n",
    "        x_col=\"X_position\"\n",
    "        y_col='Y_position'\n",
    "        max_n=350\n",
    "        \n",
    "        \n",
    "        # 执行计算\n",
    "        averages = calculate_distance_stats(\n",
    "            csv_file, x_col, y_col, max_n\n",
    "        )\n",
    "        \n",
    "        # 生成图表\n",
    "        n_values = list(range(1, max_n+1))\n",
    "        plot_results(n_values, averages, \"\")\n",
    "        \n",
    "    except Exception as e:\n",
    "        print(f\"错误发生：{str(e)}\")\n",
    "        print(\"常见问题检查：\")\n",
    "        print(\"1. CSV文件路径是否正确\")\n",
    "        print(\"2. 坐标列名是否匹配\")\n",
    "        print(f\"3. max_n值是否小于要素数量\")"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "myenv2",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.18"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
